//package com.leesche.zcsp.node.net.service.data;
//
//import java.util.Iterator;
//import java.util.Map;
//import java.util.Map.Entry;
//import java.util.Set;
//import java.util.concurrent.ConcurrentHashMap;
//
//import org.apache.log4j.Logger;
//
//import com.leesche.zcsp.node.net.service.impl.GizwitsServiceImpl;
//import com.leesche.zcsp.node.utils.OpCode;
//
//public class SynchronizeMgr {
//	private static final long SLEEPTIME = 200;
//	private static final long OVERTIME = 4000;
//
//	private static final Logger LOGGER = Logger
//			.getLogger(GizwitsServiceImpl.class);
//
//	private static Map<String, Map<Integer, SynchronizeCommand>> dataMap = new ConcurrentHashMap<String, Map<Integer, SynchronizeCommand>>();
//
//	private static SynchronizeCommand addCommand(String did, int opcode) {
//		Map<Integer, SynchronizeCommand> commands = dataMap.get(did);
//		if (commands == null) {
//			commands = new ConcurrentHashMap<Integer, SynchronizeCommand>();
//			dataMap.put(did, commands);
//		}
//
//		SynchronizeCommand command = new SynchronizeCommand();
//		command.isWait = true;
//		command.isSynchronized = false;
//		command.pastTime = 0;
//		commands.put(opcode, command);
//		return command;
//
//	}
//
//	private static void removeCommand(String did, int opcode) {
//		Map<Integer, SynchronizeCommand> map = dataMap.get(did);
//		if (map == null) {
//			return;
//		} else {
//			map.remove(opcode);
//		}
//	}
//
//	public static SynchronizeCommand getCommand(String did, int opcode) {
//		Map<Integer, SynchronizeCommand> map = dataMap.get(did);
//		if (map == null) {
//			return null;
//		} else {
//			SynchronizeCommand command = map.get(opcode);
//			return command;
//		}
//	}
//
//	public static void removeAllCommand(String did) {
//		Map<Integer, SynchronizeCommand> map = dataMap.get(did);
//		if (map != null) {
//			SynchronizeCommand command = map.get(OpCode.isOnLineReq);
//			if (command != null) {
//				command.isWait = true;
//				command.isSynchronized = false;
//			}
//
//			dataMap.remove(did);
//		}
//	}
//
//	public static void notify(String did, int opcode, boolean isSynch) {
//		SynchronizeCommand command = getCommand(did, opcode);
//		if (command != null) {
//			command.isWait = false;
//			command.isSynchronized = isSynch;
//		}
//	}
//
//	public static SynchronizeCommand waitFor(String did, int opcode)
//			throws InterruptedException {
//
//		SynchronizeCommand command = getCommand(did, opcode);
//		//防止重复发送多条相同指令针对一个设备
//		if (command == null) {
//			command = addCommand(did, opcode);
//			while (command.isWait) {
//				command.pastTime += SLEEPTIME;
//				Thread.sleep(SLEEPTIME);
//				if (command.pastTime > OVERTIME) {
//					break;
//				}
//			}
//			removeCommand(did, opcode);
//			return command;
//		}
//		else
//		{
//			return null;
//		}
//	}
//}
